package com.databaseManager;
import java.sql.*;

/**
 * @author addzero
 * @version 1.0.1
 * 修改了访问数据库
 */
public class DatabaseManager {
    // MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DB_URL = "jdbc:mysql://123.57.16.225:3306/outpatient?useUnicode=true&characterEncoding=UTF-8";

    // 数据库的用户名与密码，需要根据自己的设置
    static final String USER = "root";
    static final String PASS = "root";

    // 注册 JDBC 驱动
    static {
        try{
            Class.forName(JDBC_DRIVER);
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接
     * @return
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException
    {
        return DriverManager.getConnection(DB_URL,USER,PASS);
    }

    /**
     * 关闭连接
     * @param conn
     * @param stmt
     * @param rs
     * @throws SQLException
     */
    public static void closeAll(Connection conn,Statement stmt,ResultSet rs) throws SQLException {
        if(rs!=null) {
            rs.close();
        }
        if(stmt!=null) {
            stmt.close();
        }
        if(conn!=null) {
            conn.close();
        }
    }


    /**
     * 执行sql语句
     * @param conn
     * @param preparedSql 预编译sql语句，从sqlFunc类中调用
     * @param sqlType sql语句类型，区分查询与增删改操作
     * @param param 传入预编译sql语句参数
     * @return 返回ResultSet结果集，注意由于修改了连接机制，需要在外部自行关闭连接
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    public ResultSet executeSQL(Connection conn, String preparedSql, SqlOP sqlType, Object[] param) throws ClassNotFoundException, SQLException {
        ResultSet rs = null;
        PreparedStatement pstmt = conn.prepareStatement(preparedSql); // 得到PreparedStatement对象
        /* 处理SQL,执行SQL */
        try {

            if (param != null) {
                for (int i = 0; i < param.length; i++) {
                    pstmt.setObject(i + 1, param[i]); // 为预编译sql设置参数

                }
            }
            // 根据类型执行SQL语句
            if(sqlType == SqlOP.SELECT)
            {
                rs = pstmt.executeQuery();
            }
            else
            {
                pstmt.execute();
            }

        } catch (SQLException e) {
            e.printStackTrace(); // 处理SQLException异常
        }
        return rs;
    }

}
